package com.ruijie.acl.service;

import java.util.List;

import org.hibernate.Criteria;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.util.Assert;

import com.ruijie.acl.TimeInfo;
import com.ruijie.acl.TimeRange;
import com.ruijie.foundation.dao.support.Page;
/**
 * <p>
 * Title: ACL时间列表接口实现类
 * </p>
 * <p>
 * Description: 为ACL时间列表模块提供逻辑处理，以及数据库的操作。
 * </p>
 * <p>
 * Copyright: Copyright (c) 2008
 * </p>
 * <p>
 * Company: Ruijie Co., Ltd.
 * </p>
 * <p>
 * Create Time: 
 * </p>
 * <p>
 * Update Time:
 * </p>
 * <p>
 * Updater:
 * </p>
 * <p>
 * Update Comments:
 * </p>
 * 
 * @author ASAI
 */
public class TimeInfoServiceImpl extends AclHibernateEntityExtendDao<TimeInfo> implements
	TimeInfoService {

	/**
	 * 分页查询时间列表
	 * @param timeRange 时间段
	 * @param pageNo 页数
	 * @param pageSize 每面显示的记录数
	 * @return 时间列表
	 */
	public Page pageQueryByTimeInfo(TimeRange timeRange,int pageNo,int pageSize){		
		Criteria criteria = createCriteria(TimeInfo.class);
		criteria.add(Restrictions.eq("timeRange", timeRange));
		return pagedQuery(criteria, pageNo, pageSize);
	}

	/**
	 * 根据ACL时间段取得ACL时间列表
	 * @param entity　ACL时间段
	 * @return　ACL时间列表
	 */
	@SuppressWarnings("unchecked")
	public List<TimeInfo> getByTimeRange(TimeRange timeRange) {
		Assert.notNull(timeRange);
		Criteria criteria = createCriteria(TimeInfo.class);
		criteria.add(Restrictions.eq("timeRange", timeRange));
//		criteria.addOrder(org.hibernate.criterion.Order.asc("periodic"))
//			.addOrder(org.hibernate.criterion.Order.asc("starttime"))
//			.addOrder(org.hibernate.criterion.Order.asc("endtime"));
		List<TimeInfo> list = criteria.list();
		return list;
	}
	
	/**
	 * 验证是否存在相同的时间列表
	 * @param entity TimeInfo对象
	 * @return boolean
	 */
	public boolean isExistTimeInfo(TimeInfo entity,Long id) {
		Assert.notNull(entity);
		Criteria criteria = createCriteria(TimeInfo.class);
		criteria.add(Restrictions.eq("starttime", entity.getStarttime()));
		criteria.add(Restrictions.eq("endtime", entity.getEndtime()));
		criteria.add(Restrictions.eq("periodic", entity.getPeriodic()));
		criteria.add(Restrictions.eq("timeRange", entity.getTimeRange()));
		// 如果ID号 != null ,则表示为修改，如果ID号 == null ，则为添加
		if (id != null) {
			Criterion idCriterion = Restrictions.not(Restrictions.eq("id", id));
			criteria.add(idCriterion);
		}
		
		int totalCount = (Integer) criteria.setProjection(
				Projections.rowCount()).uniqueResult();

		// 如果都没有被使用,返回False
		if (totalCount == 0) {
			return false;
		} else {
			return true;
		}
	}
	/**
	 * 根据时间段删除时间信息
	 * @param timeRange 时间段
	 */
	public void deleteByTimeRange(TimeRange timeRange){
		Assert.notNull(timeRange);
		String hql = "delete from TimeInfo where timeRange = ?";
		this.createQuery(hql, timeRange).executeUpdate();
	}

}
